

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/IKKIS_LOGO.png">
  <link rel="icon" href="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/IKKIS_LOGO.png">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="Ikki">
  <meta name="keywords" content="">
  
    <meta name="description" content="参考链接 1.OSI七层模型 Open System Interconnection,适用于所有的网络  优点  分工带来效能 将复杂的流程分解为几个功能相对单一的子进程 整个流程更加清晰，复杂问题简单化 更容易发现问题并针对性的解决问题  1.1 分层模型 应用层：网络服务和最终用户的一个接口 表示层：数据的表示、安全、压缩 会话层：建立、管理、终止会话 传输层：定义传输数据的协议端口号，以及流">
<meta property="og:type" content="article">
<meta property="og:title" content="ISO七层模型">
<meta property="og:url" content="http://81.68.132.127/2022/09/23/network/ISO%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/index.html">
<meta property="og:site_name" content="IKKI">
<meta property="og:description" content="参考链接 1.OSI七层模型 Open System Interconnection,适用于所有的网络  优点  分工带来效能 将复杂的流程分解为几个功能相对单一的子进程 整个流程更加清晰，复杂问题简单化 更容易发现问题并针对性的解决问题  1.1 分层模型 应用层：网络服务和最终用户的一个接口 表示层：数据的表示、安全、压缩 会话层：建立、管理、终止会话 传输层：定义传输数据的协议端口号，以及流">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/beijing/iTab-28mpg6.jpeg">
<meta property="article:published_time" content="2022-09-23T08:14:17.000Z">
<meta property="article:modified_time" content="2022-10-07T11:58:59.387Z">
<meta property="article:author" content="Ikki">
<meta property="article:tag" content="网络知识">
<meta property="article:tag" content="iso">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/beijing/iTab-28mpg6.jpeg">
  
  
    <meta name="referrer" content="no-referrer-when-downgrade">
  
  
  <title>ISO七层模型 - IKKI</title>

  <link  rel="stylesheet" href="https://lib.baomitu.com/twitter-bootstrap/4.6.1/css/bootstrap.min.css" />



  <link  rel="stylesheet" href="https://lib.baomitu.com/github-markdown-css/4.0.0/github-markdown.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/hint.css/2.7.0/hint.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css" />



<!-- 主题依赖的图标库，不要自行修改 -->
<!-- Do not modify the link that theme dependent icons -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />


  <link id="highlight-css" rel="stylesheet" href="/css/highlight.css" />
  
    <link id="highlight-css-dark" rel="stylesheet" href="/css/highlight-dark.css" />
  



  
<link rel="stylesheet" href="/fluid/css/fluid-extention.css">
<link rel="stylesheet" href="/fluid/css/nihao.css">



  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    Fluid.ctx = Object.assign({}, Fluid.ctx)
    var CONFIG = {"hostname":"81.68.132.127","root":"/","version":"1.9.3","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false,"scope":[]},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"left","visible":"hover","icon":""},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"code_language":{"enable":true,"default":"TEXT"},"copy_btn":true,"image_caption":{"enable":true},"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"placement":"left","headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":3},"lazyload":{"enable":true,"loading_img":"https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"follow_dnt":true,"baidu":null,"google":null,"gtag":null,"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml"};

    if (CONFIG.web_analytics.follow_dnt) {
      var dntVal = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
      Fluid.ctx.dnt = dntVal && (dntVal.startsWith('1') || dntVal.startsWith('yes') || dntVal.startsWith('on'));
    }
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
  


  
<meta name="generator" content="Hexo 5.4.2"></head>


<body>
  

  <header>
    

<div class="header-inner" style="height: 100vh;">
  <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>Ikki-BUG制造者</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                <i class="iconfont icon-home-fill"></i>
                首页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              &nbsp;<i class="iconfont icon-search"></i>&nbsp;
            </a>
          </li>
          
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">&nbsp;<i
                class="iconfont icon-dark" id="color-toggle-icon"></i>&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

  

<div id="banner" class="banner" parallax=true
     style="background: url('http://image.ikki0603.cn') no-repeat center center; background-size: cover;">
  <div class="full-bg-img">
    <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
      <div class="banner-text text-center fade-in-up">
        <div class="h2">
          
            <span id="subtitle" data-typed-text="ISO七层模型"></span>
          
        </div>

        
          
  <div class="mt-3">
    
    
      <span class="post-meta">
        <i class="iconfont icon-date-fill" aria-hidden="true"></i>
        <time datetime="2022-09-23 16:14" pubdate>
          2022年9月23日 下午
        </time>
      </span>
    
  </div>

  <div class="mt-1">
    
      <span class="post-meta mr-2">
        <i class="iconfont icon-chart"></i>
        
          11k 字
        
      </span>
    

    
      <span class="post-meta mr-2">
        <i class="iconfont icon-clock-fill"></i>
        
        
        
          94 分钟
        
      </span>
    

    
    
      
        <span id="busuanzi_container_page_pv" style="display: none">
          <i class="iconfont icon-eye" aria-hidden="true"></i>
          <span id="busuanzi_value_page_pv"></span> 次
        </span>
        
      
    
  </div>


        
      </div>

      
        <div class="scroll-down-bar">
          <i class="iconfont icon-arrowdown"></i>
        </div>
      
    </div>
  </div>
</div>

</div>

  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="side-col d-none d-lg-block col-lg-2">
      
  <aside class="sidebar" style="padding-left: 2rem; margin-right: -1rem">
    <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;目录</p>
  <div class="toc-body" id="toc-body"></div>
</div>



  </aside>


    </div>

    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div id="board">
          <article class="post-content mx-auto">
            <!-- SEO header -->
            <h1 style="display: none">ISO七层模型</h1>
            
              <p class="note note-info">
                
                  
                    本文最后更新于：2022年10月7日 晚上
                  
                
              </p>
            
            
              <div class="markdown-body">
                
                <p><a target="_blank" rel="noopener" href="http://zhufengpeixun.com/strong/html/67-1-network.html">参考链接</a></p>
<h1 id="1-OSI七层模型"><a href="#1-OSI七层模型" class="headerlink" title="1.OSI七层模型"></a>1.OSI七层模型</h1><blockquote>
<p>Open System Interconnection,适用于所有的网络</p>
</blockquote>
<p>优点</p>
<ul>
<li>分工带来效能</li>
<li>将复杂的流程分解为几个功能相对单一的子进程</li>
<li>整个流程更加清晰，复杂问题简单化</li>
<li>更容易发现问题并针对性的解决问题</li>
</ul>
<h2 id="1-1-分层模型"><a href="#1-1-分层模型" class="headerlink" title="1.1 分层模型"></a>1.1 分层模型</h2><ul>
<li>应用层：网络服务和最终用户的一个接口</li>
<li>表示层：数据的表示、安全、压缩</li>
<li>会话层：建立、管理、终止会话</li>
<li>传输层：定义传输数据的协议端口号，以及流程控制和差错校验(保证可靠的传输，例如设置一个轮询定时器，每隔几秒必须回来报告一次，直到安全送达)</li>
<li>网络层：进行逻辑地址寻找，实现不同网络之间的路径选择</li>
<li>数据链接层：建立逻辑链接、进行硬件地址寻找、差错校验等功能</li>
<li>物理层：建立、维护、断开物理连接</li>
</ul>
<blockquote>
<p>注意点：下层是为上层服务的，上层会把数据交给下层来进行下一步处理<br>注意点：每一次向下传输都会包裹一层标识，收到后再一层一层打开</p>
</blockquote>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%88%86%E5%B1%82%E6%A8%A1%E5%9E%8B.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h1 id="2-TCP-IP参考模型"><a href="#2-TCP-IP参考模型" class="headerlink" title="2. TCP/IP参考模型"></a>2. TCP/IP参考模型</h1><ul>
<li>TCP/IP是传输控制协议/网络互联协议的简称</li>
<li>早期的TCP/IP模型是一个四层结构，从下往上依次是网络接口层、互联网层、传输层和应用层</li>
<li>后来在使用过程中，借鉴OSI七层参考模型，将网络接口层划分为了物理层和数据链路层，形成五层结构</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/TCP:IP%E5%8F%82%E8%80%83%E6%A8%A1%E5%9E%8B.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h2 id="2-1-常用协议"><a href="#2-1-常用协议" class="headerlink" title="2.1 常用协议"></a>2.1 常用协议</h2><ul>
<li>TCP/IP协议被称为传输控制协议/互联网协议，又称网络通讯协议</li>
<li>是由网络层的IP协议和传输层的TCP协议组成，是一个很大的协议集合</li>
<li>物理层和数据链路层没有定义任何特定协议，支持所有的标准和专用的协议</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%B8%B8%E7%94%A8%E5%8D%8F%E8%AE%AE.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h1 id="3-网络接口层"><a href="#3-网络接口层" class="headerlink" title="3. 网络接口层"></a>3. 网络接口层</h1><ul>
<li>网络接口层是TCP/IP模型的最底层，负责接收从上一层交来的数据报并将数据报通过底层的物理网络发送出去，比较常见的就是设备的驱动程序，此层没有特定的协议</li>
<li>网络接口层又分为物理层和数据链路层</li>
</ul>
<h2 id="3-1-物理层"><a href="#3-1-物理层" class="headerlink" title="3.1 物理层"></a>3.1 物理层</h2><ul>
<li>计算机在传递数据的时候传递的都是0和1的数字，</li>
<li>物理层关心的是用什么信号来表示0和1，是否可以双向通信，最初的连接如何建立以及完成连接如何终止,物理层是为数据传输提供可靠的环境</li>
<li>尽可能的屏蔽掉物理设备和传输媒介，使数据链路层不考虑这些差异，只考虑本层的协议和服务</li>
<li>为用户提供在一条物理传输媒体上提供传送和接收比特流的能力</li>
<li>需要解决物理连接、维护和释放的问题</li>
</ul>
<h3 id="3-1-1-数字信号的编码"><a href="#3-1-1-数字信号的编码" class="headerlink" title="3.1.1 数字信号的编码"></a>3.1.1 数字信号的编码</h3><p>数字信号的编码：用何种物理信号来表示0和1</p>
<h4 id="3-1-1-1-非归零编码"><a href="#3-1-1-1-非归零编码" class="headerlink" title="3.1.1.1 非归零编码"></a>3.1.1.1 非归零编码</h4><ul>
<li>优点： 编/译码简单。</li>
<li>缺点： 内部不含时钟信号， 收/发端同步困难。</li>
<li>用途： 计算机内部， 或低速数据通信。</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E9%9D%9E%E5%BD%92%E9%9B%B6%E7%BC%96%E7%A0%81.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="3-1-1-2-曼彻斯特编码"><a href="#3-1-1-2-曼彻斯特编码" class="headerlink" title="3.1.1.2 曼彻斯特编码"></a>3.1.1.2 曼彻斯特编码</h4><p>优点：</p>
<ul>
<li>内部自含时钟， 收/发端同步容易。</li>
<li>抗干扰能力强。</li>
</ul>
<p>缺点：</p>
<ul>
<li>编/译码较复杂。</li>
<li>占用更多的信道带宽， 在同样的波特率的情况下， 要比非归零编码多占用一倍信道带宽。</li>
</ul>
<p>用途： 802.3局域网（以太网）</p>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%9B%BC%E5%88%87%E6%96%AF%E7%89%B9.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h2 id="3-2-数据链路层"><a href="#3-2-数据链路层" class="headerlink" title="3.2 数据链路层"></a>3.2 数据链路层</h2><ul>
<li>数据链路层是OSI参考模型中的第二层，介乎于物理层和网络层之间</li>
<li>数据链路层在物理层提供的服务的基础上向网络层提供服务，其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层</li>
<li>如何将数据组合成数据块，在数据链路层中称这种数据块为帧frame，帧是数据链路层的传送单位</li>
</ul>
<h3 id="3-2-1-以太网"><a href="#3-2-1-以太网" class="headerlink" title="3.2.1 以太网"></a>3.2.1 以太网</h3><ul>
<li>以太网（Ethernet）是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准，它规定了包括物理层的连线、电子信号和介质访问层协议的内容</li>
<li>以太网的标准拓扑结构为总线型拓扑</li>
<li>以太网仍然使用总线型拓扑和CSMA/CD（Carrier Sense Multiple Access/Collision Detection，即载波多重访问/碰撞侦测）的总线技术</li>
<li>以太网实现了网络上无线电系统多个节点发送信息的想法，每个节点必须获取电缆或者信道的才能传送信息</li>
<li>每一个节点有全球唯一的48位地址也就是制造商分配给网卡的MAC地址，以保证以太网上所有节点能互相鉴别</li>
</ul>
<h3 id="3-2-2-总线型拓扑"><a href="#3-2-2-总线型拓扑" class="headerlink" title="3.2.2 总线型拓扑"></a>3.2.2 总线型拓扑</h3><ul>
<li>总线型拓扑是采用单根传输作为共用的传输介质,将网络中所有的计算机通过相应的硬件接口和电缆直接连接到这根共享的总线上</li>
<li>使用总线型拓扑结构需解决的是确保端用户使用媒体发送数据时不能出现冲突。</li>
<li>总线型网络采用载波监听多路访问/冲突检测协议（CSMA/CD)作为控制策略</li>
</ul>
<blockquote>
<p>理解：在局域网内，数据传输都是通过网络总线传输的，每台电脑都可以用网络总线</p>
</blockquote>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%80%BB%E7%BA%BF%E5%9E%8B%E6%8B%93%E6%89%91.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="3-2-2-1-载波监听多路访问"><a href="#3-2-2-1-载波监听多路访问" class="headerlink" title="3.2.2.1 载波监听多路访问"></a>3.2.2.1 载波监听多路访问</h4><ul>
<li>就是总线大家都可以用，但是不能同时一起用，需要错峰</li>
<li>一台计算机发送消息，会先进行广播，所有计算机都可以接收到，但是会进行自我检查，如果目标地址是自己才可以接收</li>
</ul>
<h4 id="3-2-2-2-冲突检测"><a href="#3-2-2-2-冲突检测" class="headerlink" title="3.2.2.2 冲突检测"></a>3.2.2.2 冲突检测</h4><ul>
<li>冲突检测即发送站点在发送数据时要边发送边监听信道，若监听到信道有干扰信号，则表示产生了冲突，于是就要停止发送数据，计算出退避等待时间，然后使用CSMA方法继续尝试发送</li>
<li>计算退避等待时间采用的是二进制指数退避算法</li>
</ul>
<blockquote>
<p>二进制指数退避算法:1s 2s 4s 8s指数级递增等待时间，最多16次后就放弃发送</p>
</blockquote>
<h4 id="3-2-2-3-交换机"><a href="#3-2-2-3-交换机" class="headerlink" title="3.2.2.3 交换机"></a>3.2.2.3 交换机</h4><ul>
<li>交换机是二层设备，它可以通过mac地址准确的将数据发送到目标客户端，不像载波监听多路访问</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E4%BA%A4%E6%8D%A2%E6%9C%BA.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="3-2-3-MAC地址"><a href="#3-2-3-MAC地址" class="headerlink" title="3.2.3 MAC地址"></a>3.2.3 MAC地址</h3><ul>
<li>在通信过程中是用内置在网卡内的地址来标识计算机身份的</li>
<li>每个网卡都有一个全球唯一的地址来标识自己，不会重复</li>
<li>MAC地址48位的二进制组成，通常分为6段，用16进制表示</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/MAC%E5%9C%B0%E5%9D%80.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="3-2-4-以太网帧格式"><a href="#3-2-4-以太网帧格式" class="headerlink" title="3.2.4 以太网帧格式"></a>3.2.4 以太网帧格式</h3><ul>
<li>在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成</li>
<li>后面紧跟着一个以太网报头，以MAC地址说明目的地址和源地址</li>
<li>帧的中部是该帧负载的包含其他协议报头的数据包(例如IP协议)</li>
<li>以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E4%BB%A5%E5%A4%AA%E7%BD%91%E5%B8%A7%E6%A0%BC%E5%BC%8F.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"><br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E4%BB%A5%E5%A4%AA%E7%BD%91%E5%B8%A7%E6%A0%BC%E5%BC%8F2.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="3-2-5-ARP协议"><a href="#3-2-5-ARP协议" class="headerlink" title="3.2.5 ARP协议"></a>3.2.5 ARP协议</h3><ul>
<li>根据IP地址获取物理地址的一个TCP/IP协议</li>
<li>理解：在同一个局域网内，A电脑发送消息，会进行广播到所有电脑，并且接受返回消息，如果C电脑是目标ip，那么会返回C电脑的mac地址，然后A电脑就会在数据链接层合并成frame</li>
<li>缺点：由此攻击者就可以向某一主机发送伪ARP应答报文，使其发送的信息无法到达预期的主机或到达错误的主机，这就构成了一个ARP欺骗</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ARP%E5%8D%8F%E8%AE%AE.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="3-2-5-1-ARP协议报文"><a href="#3-2-5-1-ARP协议报文" class="headerlink" title="3.2.5.1 ARP协议报文"></a>3.2.5.1 ARP协议报文</h3><p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ARP%E5%8D%8F%E8%AE%AE%E6%8A%A5%E6%96%87.jpeg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<ul>
<li>ARP：我的ip地址是XX，mac地址XX，要找一个ip地址是XX的mac地址返回给我</li>
<li>RARP：我的mac地址是XX，ip地址是XX，要找一个mac地址是XX的ip地址返回给我<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ARP%E5%8D%8F%E8%AE%AE%E6%8A%A5%E6%96%871.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"><br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ARP%E5%8D%8F%E8%AE%AE%E6%8A%A5%E6%96%872.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></li>
</ul>
<h4 id="3-2-5-2-ARP地址解析过程"><a href="#3-2-5-2-ARP地址解析过程" class="headerlink" title="3.2.5.2 ARP地址解析过程"></a>3.2.5.2 ARP地址解析过程</h4><p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ARP%E5%9C%B0%E5%9D%80%E8%A7%A3%E6%9E%90%E8%BF%87%E7%A8%8B.jpeg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<ol>
<li>主机A首先查看自己的ARP表，确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址，则主机A直接利用ARP表中的MAC地址，对IP数据包进行帧封装，并将数据包发送给主机B。</li>
<li>如果主机A在ARP表中找不到对应的MAC地址，则将缓存该数据报文，然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址，目标IP地址和目标MAC地址为主机B的IP地址和主机B的MAC地址。由于ARP请求报文以广播方式发送，该网段上的所有主机都可以接收到该请求，但只有被请求的主机（即主机B）会对该请求进行处理。</li>
<li>主机B比较自己的IP地址和ARP请求报文中的目标IP地址，当两者相同时进行如下处理：将ARP请求报文中的发送端（即主机A）的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A，其中包含了自己的MAC地址。</li>
<li>主机A收到ARP响应报文后，将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发，同时将IP数据包进行封装后发送出去。</li>
</ol>
<h1 id="4-互联网层-网络层"><a href="#4-互联网层-网络层" class="headerlink" title="4. 互联网层(网络层)"></a>4. 互联网层(网络层)</h1><ul>
<li>位于传输层和网络接口层之间,用于把数据从源主机经过若干个中间节点传送到目标主机,并向传输层提供最基础的数据传输服务,它要提供路由和选址的工作</li>
</ul>
<h2 id="4-1-选址"><a href="#4-1-选址" class="headerlink" title="4.1 选址"></a>4.1 选址</h2><ul>
<li>交换机是靠MAC来寻址的，而因为MAC地址是无层次的,所以要靠IP地址来确认计算机的位置,这就是选址</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E9%80%89%E5%9D%80.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h2 id="4-2-路由"><a href="#4-2-路由" class="headerlink" title="4.2 路由"></a>4.2 路由</h2><ul>
<li>在能够选择的多条道路之间选择一条最短的路径就是路由的工作</li>
</ul>
<h2 id="4-3-IP"><a href="#4-3-IP" class="headerlink" title="4.3 IP"></a>4.3 IP</h2><ul>
<li>在网络中，每台计算机都有一个唯一的地址，方便别人找到它，这个地址称为IP地址。</li>
</ul>
<h3 id="4-3-1-IP头部"><a href="#4-3-1-IP头部" class="headerlink" title="4.3.1 IP头部"></a>4.3.1 IP头部</h3><p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/IP.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"><br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/IP1.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"><br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/IP2.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="4-3-2-IP地址格式"><a href="#4-3-2-IP地址格式" class="headerlink" title="4.3.2 IP地址格式"></a>4.3.2 IP地址格式</h3><ul>
<li>IP地址是一个网络编码，用来确定网络中的一个节点。</li>
<li>IP地址是由32位二进制(32bit)组成</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/IP%E5%9C%B0%E5%9D%80%E6%A0%BC%E5%BC%8F.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="4-3-3-IP地址组成"><a href="#4-3-3-IP地址组成" class="headerlink" title="4.3.3 IP地址组成"></a>4.3.3 IP地址组成</h3><ul>
<li>网络部分(NETWORK)</li>
<li>主机部分(HOST)</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/IP%E5%9C%B0%E5%9D%80%E7%BB%84%E6%88%90.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="4-3-5-IP地址的分类"><a href="#4-3-5-IP地址的分类" class="headerlink" title="4.3.5 IP地址的分类"></a>4.3.5 IP地址的分类</h3><ul>
<li>IP地址的网络部分是由Internet地址分配机构来统一分配的，这样可以保证IP的唯一性。</li>
<li>ip地址中全为1的ip即255.255.255.255，它称为限制广播地址，如果将其作为数据包的目标地址可以理解为发送到所有网络的所有主机</li>
<li>ip地址中全为0的ip即0.0.0.0，它表示启动时的ip地址，其含义就是尚未未分配时的ip地址</li>
<li>127是用来进行本机测试的，除了127.255.255.255外，其它的127开头的地址都代表本机</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/IP%E5%9C%B0%E5%9D%80%E7%9A%84%E5%88%86%E7%B1%BB.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="4-3-6-公有地址和私有地址"><a href="#4-3-6-公有地址和私有地址" class="headerlink" title="4.3.6 公有地址和私有地址"></a>4.3.6 公有地址和私有地址</h3><table>
<thead>
<tr>
<th>分类</th>
<th>范围</th>
</tr>
</thead>
<tbody><tr>
<td>A类私有IP</td>
<td>10.0.0.0 ~ 10.255.255.255</td>
</tr>
<tr>
<td>B类私有IP</td>
<td>172.16.0.0 ~ 172.31.255.255</td>
</tr>
<tr>
<td>C类私有IP</td>
<td>192.168.0.0 ~ 192.168.255.255</td>
</tr>
</tbody></table>
<p>其他范围的IP均为公有IP地址</p>
<h3 id="4-3-7-子网掩码"><a href="#4-3-7-子网掩码" class="headerlink" title="4.3.7 子网掩码"></a>4.3.7 子网掩码</h3><ul>
<li>子网掩码(subnet mask)又叫子网络遮罩，它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网，以及哪些位标识的是主机位的掩码。</li>
<li>子网掩码主要是解决网端问题，也就是网络划分出子网</li>
<li>子网掩码不能单独存在，它必须结合IP地址一起使用。</li>
<li>子网掩码只有一个作用，就是将某个IP地址划分成网络地址和主机地址两部分。</li>
<li>子网掩码也是32个二进制位</li>
<li>对应IP的网络部分用1表示</li>
<li>对应IP地址的主机部分用0表示</li>
<li>IP地址和子网掩码做逻辑与运算得到网络地址</li>
<li>0和任何数相与都是0</li>
<li>1和任何数相与都等于任何数本身</li>
<li>A B C 三类地址都有自己默认的子网掩码<ul>
<li><ul>
<li>A类 255.0.0.0</li>
</ul>
</li>
<li><ul>
<li>B类 255.255.0.0</li>
</ul>
</li>
<li><ul>
<li>C类 255.255.255.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81.jpeg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"><br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%812.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h1 id="5-传输层"><a href="#5-传输层" class="headerlink" title="5. 传输层"></a>5. 传输层</h1><ul>
<li>位于应用层和网络接口层之间</li>
<li>是面向连接的、可靠的的进程到进程通信的协议</li>
<li>TCP提供全双工服务，即数据可在同一时间双向传播</li>
<li>TCP将若干个字节构成一个分组，此分组称为报文段(Segment)</li>
<li>对可靠性要求高的上层协议，实现可靠性的保证,如果数据丢失、损坏的情况下如何保证可靠性,网络层只管传递数据，成功与否并不关心</li>
</ul>
<table>
<thead>
<tr>
<th>类别</th>
<th>例子</th>
</tr>
</thead>
<tbody><tr>
<td>单工</td>
<td>单向传输，例如广播、电视</td>
</tr>
<tr>
<td>半双工</td>
<td>在同一个时间点内，只能单向通信，例如对讲机</td>
</tr>
<tr>
<td>全双工</td>
<td>在任意时间点双方都可以收发数据，例如电话</td>
</tr>
</tbody></table>
<h2 id="5-1-传输层的功能"><a href="#5-1-传输层的功能" class="headerlink" title="5.1 传输层的功能"></a>5.1 传输层的功能</h2><ul>
<li>提供了一种端到端的连接<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E4%BC%A0%E8%BE%93%E5%B1%82%E7%9A%84%E5%8A%9F%E8%83%BD.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></li>
</ul>
<h2 id="5-2-协议分类"><a href="#5-2-协议分类" class="headerlink" title="5.2 协议分类"></a>5.2 协议分类</h2><ol>
<li>TCP(Transimision Control Protocal)<ul>
<li>传输控制协议</li>
<li>可靠的、面向连接的协议</li>
<li>传输效率低</li>
</ul>
</li>
<li>UDP(User Datagram Protocal)<ul>
<li>用户数据报协议</li>
<li>不可靠的、无连接的服务</li>
<li>传输效率高</li>
</ul>
</li>
</ol>
<h2 id="5-3-TCP协议"><a href="#5-3-TCP协议" class="headerlink" title="5.3 TCP协议"></a>5.3 TCP协议</h2><ul>
<li>将数据进行分段打包传输</li>
<li>对每个数据包编号控制顺序</li>
<li>运输中丢失、重发和丢弃处理</li>
<li>流量控制避免拥塞</li>
</ul>
<h3 id="5-3-1-TCP数据包封装"><a href="#5-3-1-TCP数据包封装" class="headerlink" title="5.3.1 TCP数据包封装"></a>5.3.1 TCP数据包封装</h3><h4 id="5-3-1-1-格式"><a href="#5-3-1-1-格式" class="headerlink" title="5.3.1.1 格式"></a>5.3.1.1 格式</h4><ul>
<li>源端口号和目标端口号，计算机通过端口号识别访问哪个服务,比如http服务或ftp服务，发送方端口号是进行随机端口，目标端口号决定了接收方哪个程序来接收</li>
<li>端口号最大值65535，也就是2^16。</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%A0%BC%E5%BC%8F.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="5-3-1-2-32位序列号"><a href="#5-3-1-2-32位序列号" class="headerlink" title="5.3.1.2 32位序列号"></a>5.3.1.2 32位序列号</h4><ul>
<li>32位序列号 TCP用序列号对数据包进行标记，以便在到达目的地后重新重装，假设当前的序列号为 s，发送数据长度为 l，则下次发送数据时的序列号为 s + l。在建立连接时通常由计算机生成一个随机数作为序列号的初始值。</li>
<li>2*32-1 = 4.3G,因此发送最大为4.3G,当文件大于4.3G后，可以对4.3取膜。</li>
</ul>
<blockquote>
<p>每次发送包过去，都会开启一个定时器2s，如果2s后没有收到确认应答号，则会重新发包，如果还没有收到就是进入循环。</p>
</blockquote>
<blockquote>
<p>序列号的作用：告知对方我收到多少包了，好需要什么包</p>
</blockquote>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/32%E4%BD%8D%E5%BA%8F%E5%88%97%E5%8F%B7.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="5-3-1-3-确认应答号"><a href="#5-3-1-3-确认应答号" class="headerlink" title="5.3.1.3 确认应答号"></a>5.3.1.3 确认应答号</h4><ul>
<li>确认应答号 它等于下一次应该接收到的数据的序列号。假设发送端的序列号为 s，发送数据的长度为 l，那么接收端返回的确认应答号也是 s + l。发送端接收到这个确认应答后，可以认为这个位置以前所有的数据都已被正常接收。</li>
</ul>
<blockquote>
<p>因此如果先接收到后面发的包，那么会告诉发送方，需要前面的包让发送方重新发包，等到接收到前面的包后再发送确认号，然后告诉发送方期待下一个包</p>
</blockquote>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E7%A1%AE%E8%AE%A4%E5%BA%94%E7%AD%94%E5%8F%B7.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="5-3-1-4-4位首部长度"><a href="#5-3-1-4-4位首部长度" class="headerlink" title="5.3.1.4 4位首部长度"></a>5.3.1.4 4位首部长度</h4><blockquote>
<p>单位是字节，4位最大能表示15， 15*4 = 60  ，因此传输层头部最大长度为60</p>
</blockquote>
<h4 id="5-3-1-5-控制位"><a href="#5-3-1-5-控制位" class="headerlink" title="5.3.1.5 控制位"></a>5.3.1.5 控制位</h4><ul>
<li>控制位 TCP的连接、传输和断开都受这六个控制位的指挥<ul>
<li>URG(urgent紧急位) 紧急信号</li>
<li>PSH(push急迫位) 缓存区将满，立刻传输速度</li>
<li>RST(reset重置位) 连接断了重新连接</li>
</ul>
</li>
<li>紧急指针：尽在 URG(urgent紧急) 控制位为 1 时有效。表示紧急数据的末尾在 TCP 数据部分中的位置。通常在暂时中断通信时使用（比如输入 Ctrl + C）。</li>
</ul>
<h5 id="5-3-1-5-1-SYN"><a href="#5-3-1-5-1-SYN" class="headerlink" title="5.3.1.5.1 SYN"></a>5.3.1.5.1 SYN</h5><ul>
<li>SYN(synchronous建立联机) 同步序号位 TCP建立连接时要将这个值设为1<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/SYN.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></li>
</ul>
<h5 id="5-3-1-5-2-ACK"><a href="#5-3-1-5-2-ACK" class="headerlink" title="5.3.1.5.2 ACK"></a>5.3.1.5.2 ACK</h5><ul>
<li>ACK(acknowledgement 确认) 确认序列号有效位，表明该数据包包含确认信息<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ACK.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></li>
</ul>
<h5 id="5-3-1-5-3-FIN"><a href="#5-3-1-5-3-FIN" class="headerlink" title="5.3.1.5.3 FIN"></a>5.3.1.5.3 FIN</h5><ul>
<li>FIN发送端完成位，提出断开连接的一方把FIN置为1表示要断开连接<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/FIN.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></li>
</ul>
<h5 id="5-3-1-6-窗口值"><a href="#5-3-1-6-窗口值" class="headerlink" title="5.3.1.6 窗口值"></a>5.3.1.6 窗口值</h5><ul>
<li>窗口值 说明本地可接收数据段的数目，这个值的大小是可变的。当网络通畅时将这个窗口值变大加快传输速度，当网络不稳定时减少这个值可以保证网络数据的可靠传输。它是来在TCP传输中进行流量控制的</li>
<li>窗口大小：用于表示从应答号开始能够接受多少个 8 位字节。如果窗口大小为 0，可以发送窗口探测。</li>
</ul>
<blockquote>
<p>窗口探测：当发送方得知接收方的告知窗口已经满了，并不会放弃。会每隔一段时间回去询问接收方窗口有没有变大，直到告知变大了就会继续发送</p>
</blockquote>
<blockquote>
<p>控制传输速度：<br>第一需要不能超过带宽的最大负荷<br>第二考虑接收方的处理速度。</p>
</blockquote>
<h4 id="5-3-1-7-差错控制"><a href="#5-3-1-7-差错控制" class="headerlink" title="5.3.1.7 差错控制"></a>5.3.1.7 差错控制</h4><ul>
<li>校验和用来做差错控制，TCP校验和的计算包括TCP首部、数据和其它填充字节。在发送TCP数据段时，由发送端计算校验和，当到达目的地时又进行一次检验和计算。如果两次校验 和一致说明数据是正确的，否则 将认为数据被破坏，接收端将丢弃该数据</li>
</ul>
<blockquote>
<p>校验和的计算：进行取反，然后加一起。</p>
</blockquote>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%B7%AE%E9%94%99%E6%8E%A7%E5%88%B6.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="5-3-2-握手和断开"><a href="#5-3-2-握手和断开" class="headerlink" title="5.3.2 握手和断开"></a>5.3.2 握手和断开</h3><ul>
<li>TCP是面向连接的协议，它在源点和终点之间建立虚拟连接，而不是物理连接</li>
<li>在数据通信之前，发送端与接收端要先建立连接，等数据发送结束后，双方再断开连接</li>
<li>TCP连接的每一方都是由一个IP地址和一个端口组成</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%8F%A1%E6%89%8B%E5%92%8C%E6%96%AD%E5%BC%80.jpeg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<blockquote>
<p>图中Seq和Ack为0时是相对序列号，其实是有值的<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%8F%A1%E6%89%8B%E5%92%8C%E6%96%AD%E5%BC%801.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
</blockquote>
<h4 id="5-3-2-1-三次握手"><a href="#5-3-2-1-三次握手" class="headerlink" title="5.3.2.1 三次握手"></a>5.3.2.1 三次握手</h4><ol>
<li>主机A通过标识符SYN,Seq=0(相对序列号，其实是有值的)的数据段发送给处于监听状态的主机B，告诉主机B希望建立连接，下次序列号希望+1，需要B应答，并告诉主机B传输的起始序列号。</li>
<li>主机B通过标识符ACK，SYN,Seq=0(相对序列号，主机B的序列号，其实是有值的),Ack=1(第一次握手时候的Seq+1，也就是主机A的序列号+1)返回给主机A，告诉主机A收到了数据段，并且通过Ack=1通知主机A从哪个序列号开始发</li>
<li>主机A确认后在通过标识符ACK，Seq=1(第二次握手时候的Ack=1，也就是主机A的序列号+1后的结果)，Ack=1(第二次握手时候的Seq+1,也就是主机B的序列号+1)，并且通过Ack=1通知主机B从哪个序列号开始发</li>
</ol>
<blockquote>
<p>第一次握手Seq=0，第二次握手Ack=1，并不代表是+1，而是代表告知主机A从第一个包开始发送（都是基于length的）</p>
</blockquote>
<h4 id="5-3-2-2-收发数据"><a href="#5-3-2-2-收发数据" class="headerlink" title="5.3.2.2 收发数据"></a>5.3.2.2 收发数据</h4><ol>
<li>主机A发送PSH，ACK,  =1,Ack=1到主机B，告诉主机B从ack=1这个序列号开始发</li>
<li>主机B发送ACK，Ack=1+length(1代表主机A的序列号)给主机A，告诉主机A从ack=1+length开始发</li>
</ol>
<h4 id="5-3-2-3-四次断开"><a href="#5-3-2-3-四次断开" class="headerlink" title="5.3.2.3 四次断开"></a>5.3.2.3 四次断开</h4><ol>
<li>主机A发送标识符FIN，ACK，Seq=1+length，Ack=1到主机B，</li>
<li>主机B发送标识符ACK，Seq=1,Ack=1+length+1到主机A</li>
<li>主机B发送标识符FIN，ACK,Seq=1,Ack=1+length+1到主机A</li>
<li>主机A发送标识符ACK，Seq=1+length+1，Ack=2到主机B，主机A不会立即断开，会变成time-wait状态（一般最大持续两分钟），看一下主机B是否还会发送连接</li>
</ol>
<ul>
<li>断开时4次，原因是客户端和服务端说断开，服务端需要立即响应，服务端还有一些事情没有做完，需要等待做完后和客户端说断开</li>
<li>多个请求发送结束后，都会走到time-wait（端口有限），容易导致源端口号没有了</li>
</ul>
<h3 id="5-3-3-滑动窗口-发送的数据要有有序-是从一组数据中发送某一部分"><a href="#5-3-3-滑动窗口-发送的数据要有有序-是从一组数据中发送某一部分" class="headerlink" title="5.3.3 滑动窗口(发送的数据要有有序 是从一组数据中发送某一部分)"></a>5.3.3 滑动窗口(发送的数据要有有序 是从一组数据中发送某一部分)</h3><ul>
<li>滑动窗口（Sliding window）是一种流量控制技术</li>
<li>TCP中采用滑动窗口来进行传输控制，滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据</li>
<li>当滑动窗口为0时，发送方一般不能再发送数据报，但有两种情况除外，一种情况是可以发送紧急数据，例如，允许用户终止在远端机上的运行进程。另一种情况，如果接收端告诉发送可以继续发包的那个包的丢失话，发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小</li>
</ul>
<h4 id="5-3-3-1-窗口机制"><a href="#5-3-3-1-窗口机制" class="headerlink" title="5.3.3.1 窗口机制"></a>5.3.3.1 窗口机制</h4><ul>
<li>滑动窗口协议的基本原理就是在任意时刻，发送方都维持了一个连续的允许发送的帧的序号，称为发送窗口；同时，接收方也维持了一个连续的允许接收的帧的序号，称为接收窗口</li>
<li>发送窗口和接收窗口的序号的上下界不一定要一样，甚至大小也可以不同</li>
<li>不同的滑动窗口协议窗口大小一般不同</li>
<li>发送方窗口内的序列号代表了那些已经被发送，但是还没有被确认的帧，或者是那些可以被发送的帧</li>
<li>核心是流量控制：在建立连接时，接收端会告诉发送端自己的窗口大小（ rwnd ）,每次接收端收到数据后都会再次确认（ rwnd ）大小，如果值为0，停止发送数据。（并发送窗口探测包，持续监测窗口大小）</li>
</ul>
<blockquote>
<p>发送方的窗口 小于等于 接收方的窗口大小，要不然会爆掉</p>
</blockquote>
<blockquote>
<p>每当接收方确认后，发送方窗口会往后滑，每当接收方的包被取走后，接收方窗口会往后滑</p>
</blockquote>
<blockquote>
<p>每次会给发送的包添加序号，如果先收到后面序号的包，会一直等待前面序号的包接受后才滑动窗口，并且调整窗口大小。（因此很容易造成tcp队头阻塞）</p>
</blockquote>
<blockquote>
<p>窗口大小 = 缓存区大小 - 缓存区的字节数</p>
</blockquote>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E7%AA%97%E5%8F%A3%E6%9C%BA%E5%88%B6.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="5-3-3-3-拥塞处理"><a href="#5-3-3-3-拥塞处理" class="headerlink" title="5.3.3.3 拥塞处理"></a>5.3.3.3 拥塞处理</h4><ul>
<li>在流量控制中，接收方通过TCP的“窗口”值（Window Size）来告知发送方，由发送方通过对拥塞窗口和接收窗口的大小比较，来确定任何时刻内需要传输的数据量</li>
</ul>
<blockquote>
<p>举例：假设接收方窗口大小是无限的，接收到数据后就能发送 ACK 包，那么传输数据主要是依赖于网络带宽，带宽的大小是有限的。</p>
</blockquote>
<ul>
<li>TCP 维护一个拥塞窗口 cwnd （congestion window）变量 ，在传输过程正没有拥塞就将此值增大。如果出现拥塞（超时重传 RTO(Retransmission TimeOut) ）就将窗口值减少。</li>
<li>cwnd &lt; ssthresh 使用慢开始算法</li>
<li>cwnd &gt; ssthresh 使用拥塞避免算法</li>
<li>ROT时更新 ssthresh 值为当前窗口的一半，更新 cwnd = 1（这样就会造成慢启动）</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ikki-2022-05-10-15-18-05.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload></p>
<blockquote>
<p>快重传，可能在发送的过程中出现丢包情况。此时不要立即回退到慢开始阶段，而是对已经收到的报文重复确认，如果确认次数达到3此，则立即进行重传 快恢复算法(减少超时重传机制的出现)，降低重置 cwnd 的频率。</p>
</blockquote>
<h4 id="5-3-3-4-TCP粘包-（node中默认采用的就是nagle算法）"><a href="#5-3-3-4-TCP粘包-（node中默认采用的就是nagle算法）" class="headerlink" title="5.3.3.4 TCP粘包 （node中默认采用的就是nagle算法）"></a>5.3.3.4 TCP粘包 （node中默认采用的就是nagle算法）</h4><h5 id="5-3-3-4-1-粘包的概念"><a href="#5-3-3-4-1-粘包的概念" class="headerlink" title="5.3.3.4.1 粘包的概念"></a>5.3.3.4.1 粘包的概念</h5><ul>
<li>粘包：多个数据包被连续存储于连续的缓存中，在对数据包进行读取时由于无法确定发生方的发送边界，而采用某一估测值大小来进行数据读出，若双方的size不一致时就会使指发送方发送的若干包数据到接收方接收时粘成一包，从接收缓冲区看，后一包数据的头紧接着前一包数据的尾。<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ikki-2022-05-10-14-21-52.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload></li>
</ul>
<h5 id="5-3-3-4-2-出现粘包的原因"><a href="#5-3-3-4-2-出现粘包的原因" class="headerlink" title="5.3.3.4.2 出现粘包的原因"></a>5.3.3.4.2 出现粘包的原因</h5><ol>
<li>TCP为提高传输效率，发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少，通常TCP会根据优化算法把这些数据合成一包后一次发送出去，这样接收方就收到了粘包数据。<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ikki-2022-05-10-14-24-44.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload></li>
<li>TCP协议规定有MSS，如果数据包过长就会被分开传输。这样接收方就收到了粘包数据。<br><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/ikki-2022-05-10-14-25-22.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload></li>
<li>接收方引起的粘包是由于接收方用户进程不及时接收数据，从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区，用户进程从该缓冲区取数据，若下一包数据到达时前一包数据尚未被用户进程取走，则下一包数据放到系统接收缓冲区时就接到前一包数据之后，而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据，这样就一次取到了多包数据。</li>
</ol>
<h5 id="5-3-3-4-3-粘包的处理方式"><a href="#5-3-3-4-3-粘包的处理方式" class="headerlink" title="5.3.3.4.3 粘包的处理方式"></a>5.3.3.4.3 粘包的处理方式</h5><ol>
<li>当时短连接的情况下，不用考虑粘包的情况</li>
<li>如果发送数据无结构，如文件传输，这样发送方只管发送，接收方只管接收存储就ok，也不用考虑粘包</li>
<li>如果双方建立长连接，需要在连接后一段时间内发送不同结构数据<ol>
<li>发送端给每个数据包添加包首部，首部中应该至少包含数据包的长度，这样接收端在接收到数据后，通过读取包首部的长度字段，便知道每一个数据包的实际长度了。</li>
<li>发送端将每个数据包封装为固定长度（不够的可以通过补0填充），这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。</li>
<li>可以在数据包之间设置边界，如添加特殊符号，这样，接收端通过这个边界就可以将不同的数据包拆分开。<br>等等。</li>
</ol>
</li>
</ol>
<ul>
<li><p>Nagle 算法的基本定义是任意时刻，最多只能有一个未被确认的小段 (TCP内部控制)</p>
</li>
<li><p>如果需要一个一个包单独发送，但是这个包实际内容的字节很小(每次发送都会给加上tcp头部，ip头部等)，就会造成浪费。因此就采用了算法，比如第一个包发送完后在等待确认的中，第二个包会把后续内容比较小的包整合起来一起发送。</p>
</li>
<li><p>Nagle 算法的缺点：如果发送网络比较快，第一个发送完很快接受到响应信息，会立马发第二个包，就很容易造成没有机会tcp粘包。</p>
</li>
<li><p>Cork算法 当达到 MSS (Maximum Segment Size  )值时统一进行发送（此值就是帧的大小 - ip 头 - tcp 头 = 1460个字节）理论值 不同的网络值不同 。 （流中就有这个方法）</p>
</li>
</ul>
<h3 id="5-3-5-TCP缺陷"><a href="#5-3-5-TCP缺陷" class="headerlink" title="5.3.5 TCP缺陷"></a>5.3.5 TCP缺陷</h3><ul>
<li>TCP队头阻塞问题</li>
<li>TCP中慢启动问题</li>
<li>TCP中短连接问题</li>
</ul>
<h2 id="5-4-UDP"><a href="#5-4-UDP" class="headerlink" title="5.4 UDP"></a>5.4 UDP</h2><ul>
<li>UDP是一个无连接、不保证可靠性的传输层协议，也就是说发送端不关心发送的数据是否到达目标主机、数据是否出错等，收到数据的主机也不会告诉 发送方是否收到了数据，它的可靠性由上层协议来保障</li>
<li>首部结构简单，在数据传输时能实现最小的开销，如果进程想发送很短的报文而对可靠性要求不高可以使用</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/UDP.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="5-4-2-UDP的应用"><a href="#5-4-2-UDP的应用" class="headerlink" title="5.4.2 UDP的应用"></a>5.4.2 UDP的应用</h3><ul>
<li>QQ</li>
<li>视频软件</li>
<li>TFTP 简单文件传输协议(短信)</li>
</ul>
<h3 id="5-4-3-DNS服务器"><a href="#5-4-3-DNS服务器" class="headerlink" title="5.4.3 DNS服务器"></a>5.4.3 DNS服务器</h3><h4 id="5-4-3-1-域名"><a href="#5-4-3-1-域名" class="headerlink" title="5.4.3.1 域名"></a>5.4.3.1 域名</h4><ul>
<li>域名空间结构<ul>
<li>根域</li>
<li>顶级域<ul>
<li>组织域</li>
<li>国家/地区域名</li>
</ul>
</li>
<li>二级域名</li>
<li>子域</li>
</ul>
</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%9F%9F%E5%90%8D.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="5-4-3-2-DNS服务器"><a href="#5-4-3-2-DNS服务器" class="headerlink" title="5.4.3.2 DNS服务器"></a>5.4.3.2 DNS服务器</h4><p>DNS是Domain Name Service的缩写，DNS服务器进行域名和与之对应的IP地址转换的服务器</p>
<ul>
<li>IP地址不易记忆</li>
<li>早期使用Hosts文件解析域名<ul>
<li>主要名称重复</li>
<li>主机维护困难</li>
</ul>
</li>
<li>DNS(Domain Name System 域名系统)特点<ul>
<li>分布式</li>
<li>层次性</li>
</ul>
</li>
</ul>
<h4 id="5-4-3-3-查找过程"><a href="#5-4-3-3-查找过程" class="headerlink" title="5.4.3.3 查找过程"></a>5.4.3.3 查找过程</h4><ul>
<li>客户端向本地DNS服务器发出请求，我要访问<a target="_blank" rel="noopener" href="http://www.163.com,请告诉我它的ip地址/">www.163.com，请告诉我它的IP地址</a></li>
<li>操作系统里会对 DNS 解析结果做缓存，如果缓存中有直接返回 IP 地址</li>
<li>查找 C:\WINDOWS\system32\drivers\etc\hosts 如果有直接返回 IP 地址</li>
<li>本地DNS服务器向DNS根服务器发出请求，根DNS服务器会告诉本地服务器(.com)的服务器地址</li>
<li>本地DNS服务器会向(.com域)发请求，会得到(163.com)的服务器地址</li>
<li>本地DNS服务器会向(163.com)发请求,会得到(<a href="http://www.163.com)的IP地址1.1.1.1">www.163.com)的IP地址1.1.1.1</a></li>
<li>本地DNS服务器向客户端回复域名(<a href="http://www.163.com)对应的IP地址是1.1.1.1">www.163.com)对应的IP地址是1.1.1.1</a></li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%9F%A5%E6%89%BE%E8%BF%87%E7%A8%8B.jpeg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h4 id="5-4-3-4-网关"><a href="#5-4-3-4-网关" class="headerlink" title="5.4.3.4 网关"></a>5.4.3.4 网关</h4><p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E7%BD%91%E5%85%B3.jpg" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="5-4-4-DHCP服务器-应用层"><a href="#5-4-4-DHCP服务器-应用层" class="headerlink" title="5.4.4 DHCP服务器(应用层)"></a>5.4.4 DHCP服务器(应用层)</h3><ul>
<li>通过 DHCP 自动获取网络配置信息 （动态主机配置协议Dynamic Host Configuration<br>Protocol）我们无需自己手动配置 IP</li>
</ul>
<h4 id="5-4-4-1-工作流程"><a href="#5-4-4-1-工作流程" class="headerlink" title="5.4.4.1 工作流程"></a>5.4.4.1 工作流程</h4><ul>
<li>主机发送DHCPDISCOVER广播包在网络上寻找DHCP服务器；</li>
<li>DHCP服务器向主机发送DHCPOFFER单播数据包，包含IP地址、MAC地址、域名信息以及地址租期；</li>
<li>主机发送DHCPREQUEST广播包，正式向服务器请求分配已提供的IP地址；</li>
<li>DHCP服务器向主机发送DHCPACK单播包，确认主机的请求</li>
</ul>
<h1 id="6-应用层"><a href="#6-应用层" class="headerlink" title="6. 应用层"></a>6. 应用层</h1><h2 id="6-1-协议"><a href="#6-1-协议" class="headerlink" title="6.1 协议"></a>6.1 协议</h2><p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%8D%8F%E8%AE%AE.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h2 id="6-2-应用层常见协议"><a href="#6-2-应用层常见协议" class="headerlink" title="6.2 应用层常见协议"></a>6.2 应用层常见协议</h2><ul>
<li>HTTP 超文件传输协议</li>
<li>FTP 文件传输协议</li>
<li>SMTP(发送邮件)和POP3(接收邮件)</li>
</ul>
<h2 id="6-3-案例"><a href="#6-3-案例" class="headerlink" title="6.3 案例"></a>6.3 案例</h2><p>数据-&gt;传输层(段)-&gt;网络层(包)-&gt;数据链路层(帧)</p>
<h3 id="6-3-1-发送方是从高层到低层封装数据"><a href="#6-3-1-发送方是从高层到低层封装数据" class="headerlink" title="6.3.1 发送方是从高层到低层封装数据"></a>6.3.1 发送方是从高层到低层封装数据</h3><ul>
<li>在应用层要把各式各样的数据如字母、数字、汉字、图片等转换成二进制</li>
<li>在TCP传输层中，上层的数据被分割成小的数据段，并为每个分段后的数据封装TCP报文头部</li>
<li>在TCP头部有一个关键的字段信息端口号，它用于标识上层的协议或应用程序，确保上层数据的正常通信</li>
<li>计算机可以多进程并发运行，例如在发邮件的同时也可以通过浏览器浏览网页，这两种应用通过端口号进行区分</li>
<li>在网络层，上层数据被封装上亲的报文头部(IP头部)，上层的数据是包括TCP头部的。IP地址包括的最关键字段信息就是IP地址，用于标识网络的逻辑地址。</li>
<li>数据链路径层，上层数据成一个MAC头部，内部有最关键的是MAC地址。MAC地址就是固化在硬件设备内部的全球唯一的物理地址。</li>
<li>在物理层，无论在之前哪一层封装的报文头和还是上层数据都是由二进制组成的，物理将这些二进制数字比特流转换成电信号在网络中传输</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E5%8F%91%E9%80%81%E6%96%B9%E6%98%AF%E4%BB%8E%E9%AB%98%E5%B1%82%E5%88%B0%E4%BD%8E%E5%B1%82%E5%B0%81%E8%A3%85%E6%95%B0%E6%8D%AE.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="6-3-2-接收方是从低层到高层解封装"><a href="#6-3-2-接收方是从低层到高层解封装" class="headerlink" title="6.3.2 接收方是从低层到高层解封装"></a>6.3.2 接收方是从低层到高层解封装</h3><ul>
<li>数据封装完毕传输到接收方后，将数据要进行解封装</li>
<li>在物理层，先把电信号转成二进制数据，并将数据传送至数据链路层</li>
<li>在数据链路层，把MAC头部拆掉，并将剩余的数据传送至上一层</li>
<li>在网络层，数据的IP头部被拆掉，并将剩余的数据送至上一层</li>
<li>在传输层，把TCP头部拆掉，将真实的数据传送至应用层</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E6%8E%A5%E6%94%B6%E6%96%B9%E6%98%AF%E4%BB%8E%E4%BD%8E%E5%B1%82%E5%88%B0%E9%AB%98%E5%B1%82%E8%A7%A3%E5%B0%81%E8%A3%85.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h3 id="6-3-3-真实网络环境"><a href="#6-3-3-真实网络环境" class="headerlink" title="6.3.3 真实网络环境"></a>6.3.3 真实网络环境</h3><ul>
<li>发送方和接收方中间可能会有多个硬件中转设备</li>
<li>中间可能会增加交换机和路由器</li>
<li>数据在传输过程中不断地进行封装和解封装的过程，每层设备只能处理哪一层的数据<ul>
<li>交换机属于数据链路层</li>
<li>路由器属于网络层</li>
</ul>
</li>
</ul>
<p><img src="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/network/iso/%E7%9C%9F%E5%AE%9E%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%A2%83.png" srcset="https://ikkiss.oss-cn-hangzhou.aliyuncs.com/images/myblog/loading.gif" lazyload alt="Image text"></p>
<h1 id="7-其他"><a href="#7-其他" class="headerlink" title="7. 其他"></a>7. 其他</h1><h2 id="7-1-不同层中的称谓"><a href="#7-1-不同层中的称谓" class="headerlink" title="7.1 不同层中的称谓"></a>7.1 不同层中的称谓</h2><ul>
<li>数据帧（Frame）：是一种信息单位，它的起始点和目的点都是数据链路层。（MTU，一帧最大值，理论是1500）</li>
<li>数据包（Packet）：也是一种信息单位，它的起始和目的地是网络层。</li>
<li>段（Segment）：通常是指起始点和目的地都是传输层的信息单元。</li>
<li>消息（message）：是指起始点和目的地都在网络层以上（经常在应用层）的信息单元。</li>
</ul>
<h2 id="7-2-IP头服务类型"><a href="#7-2-IP头服务类型" class="headerlink" title="7.2 IP头服务类型"></a>7.2 IP头服务类型</h2><ul>
<li>IP首部中的服务类型（TOS）</li>
<li>TOS包括共8位，包括3 bit的优先权字段（取值可以从000-111所有值），4 bit的TOS子字段和1 bit未用位但必须置0。</li>
<li>3bit的8个优先级的定义如下：<ul>
<li>111–Network Control(网络控制）一般保留给网络控制数据使用，如路由。</li>
<li>110–Internetwork Control(网间控制)</li>
<li>101–Critic(关键)语音数据使用。</li>
<li>100–Flash Override(疾速)视频会议和视频流使用。</li>
<li>011–Flash(闪速)语音控制数据使用。</li>
<li>010–Immediate(快速)数据业务使用</li>
<li>001–Priority(优先)数据业务使用</li>
<li>000–Routine(普通)默认标记值。</li>
</ul>
</li>
<li>4 bit的TOS分别代表：最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0，那么就意味着是一般服务。</li>
<li>Telnet、Rlogin这两个交互应用要求最小的传输时延，FTP文件传输要求最大吞吐量，最高可靠性是指网络管理（SNMP）和路由选择协议。用户网络新闻要求最小费用</li>
</ul>
<blockquote>
<p>netstat -rn命令 显示路由表  </p>
</blockquote>

                
              </div>
            
            <hr/>
            <div>
              <div class="post-metas my-3">
  
    <div class="post-meta mr-3 d-flex align-items-center">
      <i class="iconfont icon-category"></i>
      

<span class="category-chains">
  
  
    
      <span class="category-chain">
        
  <a href="/categories/%E7%BD%91%E7%BB%9C%E7%9F%A5%E8%AF%86/" class="category-chain-item">网络知识</a>
  
  
    <span>></span>
    
  <a href="/categories/%E7%BD%91%E7%BB%9C%E7%9F%A5%E8%AF%86/ISO%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/" class="category-chain-item">ISO七层模型</a>
  
  

  

      </span>
    
  
</span>

    </div>
  
  
    <div class="post-meta">
      <i class="iconfont icon-tags"></i>
      
        <a href="/tags/%E7%BD%91%E7%BB%9C%E7%9F%A5%E8%AF%86/">#网络知识</a>
      
        <a href="/tags/iso/">#iso</a>
      
    </div>
  
</div>


              
  

  <div class="license-box my-3">
    <div class="license-title">
      <div>ISO七层模型</div>
      <div>http://81.68.132.127/2022/09/23/network/ISO七层模型/</div>
    </div>
    <div class="license-meta">
      
        <div class="license-meta-item">
          <div>作者</div>
          <div>Ikki</div>
        </div>
      
      
        <div class="license-meta-item license-meta-date">
          <div>发布于</div>
          <div>2022年9月23日</div>
        </div>
      
      
        <div class="license-meta-item license-meta-date">
          <div>更新于</div>
          <div>2022年10月7日</div>
        </div>
      
      
        <div class="license-meta-item">
          <div>许可协议</div>
          <div>
            
              
              
                <a target="_blank" href="https://creativecommons.org/licenses/by/4.0/">
                  <span class="hint--top hint--rounded" aria-label="BY - 署名">
                    <i class="iconfont icon-by"></i>
                  </span>
                </a>
              
            
          </div>
        </div>
      
    </div>
    <div class="license-icon iconfont"></div>
  </div>



              
                <div class="post-prevnext my-3">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2022/09/27/network/websocket/" title="websocket">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">websocket</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2022/09/22/npm/package-json%E4%B8%8Epackage-lock-json%E7%9A%84%E5%85%B3%E7%B3%BB/" title="package.json与package-lock.json的关系">
                        <span class="hidden-mobile">package.json与package-lock.json的关系</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
  <article id="comments" lazyload>
    
  <div id="valine"></div>
  <script type="text/javascript">
    Fluid.utils.loadComments('#valine', function() {
      Fluid.utils.createScript('https://lib.baomitu.com/valine/1.5.1/Valine.min.js', function() {
        var options = Object.assign(
          {"appId":"6KzYWc2oaEBaHgNl4UIicMJC-gzGzoHsz","appKey":"vJ4FIwKeHRmHraCJraAsjyZ7","path":"window.location.pathname","placeholder":"请输入你的评论\n昵称为必填项目(输入QQ号码可以自动获取昵称和邮箱)\n虽然email不是必选，但是填写了email可以收到推送通知哦！","avatar":"retro","meta":["nick","mail","link"],"requiredFields":[],"pageSize":10,"lang":"zh-CN","highlight":true,"recordIP":true,"serverURLs":"","emojiCDN":null,"emojiMaps":null,"enableQQ":true},
          {
            el: "#valine",
            path: window.location.pathname
          }
        )
        new Valine(options);
        Fluid.utils.waitElementVisible('#valine .vcontent', () => {
          var imgSelector = '#valine .vcontent img:not(.vemoji)';
          Fluid.plugins.imageCaption(imgSelector);
          Fluid.plugins.fancyBox(imgSelector);
        })
      });
    });
  </script>
  <noscript>Please enable JavaScript to view the comments</noscript>


  </article>


          </article>
        </div>
      </div>
    </div>

    <div class="side-col d-none d-lg-block col-lg-2">
      

    </div>
  </div>
</div>





  



  



  



  



  







    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v" for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>

    

    
  </main>

  <footer>
    <div class="footer-inner">
  
    <div class="footer-content">
      IKKI-专业BUG开发
    </div>
  
  
    <div class="statistics">
  
  

  
    
      <span id="busuanzi_container_site_pv" style="display: none">
        总访问量 
        <span id="busuanzi_value_site_pv"></span>
         次
      </span>
    
    
      <span id="busuanzi_container_site_uv" style="display: none">
        总访客数 
        <span id="busuanzi_value_site_uv"></span>
         人
      </span>
    
    
  
</div>

  
  
  
</div>

  </footer>

  <!-- Scripts -->
  
  <script  src="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://lib.baomitu.com/jquery/3.6.0/jquery.min.js" ></script>
<script  src="https://lib.baomitu.com/twitter-bootstrap/4.6.1/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>


  <script  src="https://lib.baomitu.com/typed.js/2.0.12/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var subtitle = document.getElementById('subtitle');
      if (!subtitle || !typing) {
        return;
      }
      var text = subtitle.getAttribute('data-typed-text');
      
        typing(text);
      
    })(window, document);
  </script>




  
    <script  src="/js/img-lazyload.js" ></script>
  




  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/tocbot/4.18.2/tocbot.min.js', function() {
    var toc = jQuery('#toc');
    if (toc.length === 0 || !window.tocbot) { return; }
    var boardCtn = jQuery('#board-ctn');
    var boardTop = boardCtn.offset().top;

    window.tocbot.init(Object.assign({
      tocSelector     : '#toc-body',
      contentSelector : '.markdown-body',
      linkClass       : 'tocbot-link',
      activeLinkClass : 'tocbot-active-link',
      listClass       : 'tocbot-list',
      isCollapsedClass: 'tocbot-is-collapsed',
      collapsibleClass: 'tocbot-is-collapsible',
      scrollSmooth    : true,
      includeTitleTags: true,
      headingsOffset  : -boardTop,
    }, CONFIG.toc));
    if (toc.find('.toc-list-item').length > 0) {
      toc.css('visibility', 'visible');
    }

    Fluid.events.registerRefreshCallback(function() {
      if ('tocbot' in window) {
        tocbot.refresh();
        var toc = jQuery('#toc');
        if (toc.length === 0 || !tocbot) {
          return;
        }
        if (toc.find('.toc-list-item').length > 0) {
          toc.css('visibility', 'visible');
        }
      }
    });
  });
</script>


  <script src=https://lib.baomitu.com/clipboard.js/2.0.11/clipboard.min.js></script>

  <script>Fluid.plugins.codeWidget();</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/anchor-js/4.3.1/anchor.min.js', function() {
    window.anchors.options = {
      placement: CONFIG.anchorjs.placement,
      visible  : CONFIG.anchorjs.visible
    };
    if (CONFIG.anchorjs.icon) {
      window.anchors.options.icon = CONFIG.anchorjs.icon;
    }
    var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
    var res = [];
    for (var item of el) {
      res.push('.markdown-body > ' + item.trim());
    }
    if (CONFIG.anchorjs.placement === 'left') {
      window.anchors.options.class = 'anchorjs-link-left';
    }
    window.anchors.add(res.join(', '));

    Fluid.events.registerRefreshCallback(function() {
      if ('anchors' in window) {
        anchors.removeAll();
        var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
        var res = [];
        for (var item of el) {
          res.push('.markdown-body > ' + item.trim());
        }
        if (CONFIG.anchorjs.placement === 'left') {
          anchors.options.class = 'anchorjs-link-left';
        }
        anchors.add(res.join(', '));
      }
    });
  });
</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js', function() {
    Fluid.plugins.fancyBox();
  });
</script>


  <script>Fluid.plugins.imageCaption();</script>

  <script  src="/js/local-search.js" ></script>

  <script defer src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" ></script>




  
<script src="/fluid/js/star.js"></script>



<!-- 主题的启动项，将它保持在最底部 -->
<!-- the boot of the theme, keep it at the bottom -->
<script  src="/js/boot.js" ></script>


  

  <noscript>
    <div class="noscript-warning">博客在允许 JavaScript 运行的环境下浏览效果更佳</div>
  </noscript>
</body>
</html>
